/*
* Project: My code
* Module: module_name
* File: core.h
* Created Date: 2024-05-24 17:53:30
* Author: your name
* Description: description
*
*历史记录：
*
* Copyright (c) 2024 - vDiscovery, Inc
*/


#ifndef _CORE_H
#define _CORE_H


/* ======================================================================================
* includes
* 添加头文件位置
*/


/* ======================================================================================
* extern
* 外部定义变量或函数位置
*/


/* ======================================================================================
* macros
* 宏定义位置
*/

/* ======================================================================================
* 设备端相关的宏
* ======================================================================================*/
// 资源bin文件在kit定义
#define VD_KIT_ID_LEN 30
#define VD_KIT_SRC_LEN 30

/* ======================================================================================
* 本程序相关的宏
* ======================================================================================*/
#define MAX_STR_LEN VD_KIT_ID_LEN

// 存文件后缀的最大长度
#define MAX_FILE_SUFFIX_LEN 10

#define OUTPUT_DIR "./output/"
#define RES_DIR "./res/"

#define RES_BIN_DATA "res_data.bin"
#define RES_BIN "res.bin"
#define C_CODE_H "gen_res_list.h"


/* ======================================================================================
* types
* 类型定义位置
*/

/* ======================================================================================
* main函数输入参数记录
* ======================================================================================*/
typedef struct {
    unsigned int version;
    char file_suffix[MAX_STR_LEN];
} input_param_t;

// 文件信息
typedef struct 
{
    char file_name[MAX_STR_LEN];
    char file_type[MAX_FILE_SUFFIX_LEN];
    unsigned int file_size;
    unsigned int length;
    unsigned int offset;
}files_t;

// 目录信息
typedef struct
{
    unsigned int file_number;
    files_t *file;
}dir_info_t;

typedef struct
{
    unsigned int byteorder;
    unsigned int version;
    unsigned int megic;
    unsigned int restype;
    unsigned int ressubtype;
    unsigned int resoucrce_num;
    unsigned int resoucrce_size;
} img_bin_header_info_t;

typedef struct
{
    char id[VD_KIT_ID_LEN];
    char src[VD_KIT_SRC_LEN];
    unsigned int size;
    unsigned int width;
    unsigned int height;
    unsigned int offset;
    unsigned int cache_mode;
} img_res_info_t;

/* ======================================================================================
* declaration
* 函数声明位置
*/

/* ======================================================================================
* file_util.c
* ======================================================================================*/

/**
 * @brief 读取旧资源文件的文件头信息
 *
 * @param bin_header
 * @return int
*/
int file_util_check_exist_res_bin(img_bin_header_info_t *bin_header);

/**
 * @brief 判断路径的目录是否存在
 *
 * @param path
 * @return int
*/
int file_util_dir_exist(char *path);

/**
 * @brief 检查是否存在output目录，如果不存在则创建
 *
 * @return int
*/
int file_util_check_output_dir(void);

/**
 * @brief 处理output目录内的文件
 *
 * @return int
*/
int file_util_output_dir_file_handle(void);

/**
 * @brief 分析资源目录提取目录内的文件列表，如果存在指定后缀则提取指定后缀列表
 *
 * @param dir_info
 * @param file_suffix
 * @return int
*/
int file_util_catch_res_dir(dir_info_t *dir_info,char *file_suffix);

/**
 * @brief 根据g_dir_info记录的res目录文件情况生成纯文件数据的res_data.bin和描述data文件的h文件
 * 
 * @param dir 
 * @return int 
 */
int file_util_gen_res_data(dir_info_t *dir);

/**
 * @brief 根据g_dir_info 合并output目录生成单bin文件
 * 
 * @param dir 
 * @return int 
 */
int file_util_gen_single_res_bin(dir_info_t *dir,img_bin_header_info_t *header);

/* ======================================================================================
* util.c
* ======================================================================================*/

/**
 * @brief 解析main函数参数将参数输入到input_param
 *
 * @param argc
 * @param argv
 * @param input_param
 * @return int
*/
int util_parse_input_param(int argc, char *argv[],input_param_t *input_param);

/**
 * @brief 合并路径和文件名到string buffer
 * 
 * @param path 
 * @param file_name 
 * @param string 
 * @param string_size 
 * @return int 
 */
int util_merge_path_file_name(const char *path,const char *file_name,char *string,int string_size);


/**
 * @brief 替换字符串中的.为_
 *
 * @param str
 */
void util_replace_dot_with_underscore(char *str);

/**
 * @brief 删除文件名中的后缀
 *
 * @param str
 */
void delete_file_suffix(char *str);

/* ======================================================================================
* scripts.c
* ======================================================================================*/
/**
 * @brief 检查python3是否存在
 *
 * @return int
*/
int scripts_check_python3_exist(void);

#endif